Move remaining char*'s in xmltag to QStrings. Tweak various callers and
authorrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 6 Sep 2013 20:38:11 +0000 (20:38 +0000)
committerrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 6 Sep 2013 20:38:11 +0000 (20:38 +0000)
copy ctors.   vtesto on CentOS 6.4 seems no worse for the wear.

git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@4594 f51c46e8-681c-474f-0cfe-069cfd0219fb

gpsbabel/delbin.cc
gpsbabel/gpsbabel.supp
gpsbabel/gpx.cc
gpsbabel/html.cc
gpsbabel/kml.cc
gpsbabel/src/core/xmltag.h
gpsbabel/text.cc
gpsbabel/util.cc
gpsbabel/xmltag.cc

index 4a4db13ac00bc7d2b96f2e40d2764971f23d75b6..87a97fd52869887053790860ca25f27d9f30ba8a 100644 (file)
@@ -1277,7 +1277,7 @@ get_gc_notes(const waypoint* wp, int* symbol, char** notes, unsigned* notes_size
     for (; curlog; curlog = xml_findnext(root, curlog, "groundspeak:log")) {
       xml_tag* logpart = xml_findfirst(curlog, "groundspeak:type");
       if (logpart) {
-        gbfprintf(fd, "%s\n", logpart->cdata);
+        gbfprintf(fd, "%s\n", CSTR(logpart->cdata));
       }
       logpart = xml_findfirst(curlog, "groundspeak:date");
       if (logpart) {
@@ -1287,13 +1287,13 @@ get_gc_notes(const waypoint* wp, int* symbol, char** notes, unsigned* notes_size
       }
       logpart = xml_findfirst(curlog, "groundspeak:finder");
       if (logpart) {
-        char* s = cet_str_utf8_to_any(logpart->cdata, global_opts.charset);
+        char* s = cet_str_utf8_to_any(CSTR(logpart->cdata), global_opts.charset);
         gbfputs(s, fd);
         xfree(s);
       }
       logpart = xml_findfirst(curlog, "groundspeak:text");
       if (logpart) {
-        char* s = cet_str_utf8_to_any(logpart->cdata, global_opts.charset);
+        char* s = cet_str_utf8_to_any(CSTR(logpart->cdata), global_opts.charset);
         gbfprintf(fd, ", %s", s);
         xfree(s);
       }
index dff92e883d26e2ba5797f88331bf9b66caff9c3d..5e192c7bacc644bccd68d2956d4f318c423e8d69 100644 (file)
@@ -39,4 +39,3 @@
    ...
    fun:_ZN11QTextStreamC1EP9QIODevice
 }
-
index cd3f87e5da1f3824393af95b6af1baf90e3a58ec..b0cec01f9e0a1c200499d5d1d3f41ae75e6424e4 100644 (file)
@@ -551,7 +551,7 @@ start_something_else(const QString el, const QXmlStreamAttributes& attr)
   }
 
   new_tag = new xml_tag;
-  new_tag->tagname = xstrdup(CSTR(el));
+  new_tag->tagname = el;
 
   attr_count = attr.size();
   new_tag->attributes = (char**)xcalloc(sizeof(char*),2*attr_count+1);
@@ -1189,7 +1189,7 @@ gpx_end(const QString& el)
 static void
 gpx_cdata(const QString& s)
 {
-  char** cdata;
+  QString* cdata;
   xml_tag* tmp_tag;
   cdatastr = s;
 
@@ -1206,10 +1206,7 @@ gpx_cdata(const QString& s)
   } else {
     cdata = &(cur_tag->cdata);
   }
-  if (*cdata) {
-    xfree(*cdata);
-  }
-  *cdata = xstrdup(CSTR(cdatastr));
+  *cdata = cdatastr;
 }
 
 static void
@@ -1339,27 +1336,27 @@ fprint_xml_chain(xml_tag* tag, const waypoint* wpt)
   while (tag) {
     writer->writeStartElement(tag->tagname);
 
-    if (!tag->cdata && !tag->child) {
+    if (tag->cdata.isEmpty() && !tag->child) {
       write_tag_attributes(tag);
       // No children?  Self-closing tag.
       writer->writeEndElement();
     } else {
       write_tag_attributes(tag);
 
-      if (tag->cdata) {
+      if (!tag->cdata.isEmpty()) {
         writer->writeCharacters(tag->cdata);
       }
       if (tag->child) {
         fprint_xml_chain(tag->child, wpt);
       }
       if (wpt && wpt->gc_data->exported.isValid() &&
-          strcmp(tag->tagname, "groundspeak:cache") == 0) {
+          tag->tagname.compare("groundspeak:cache") == 0) {
         writer->writeTextElement("time",
                                  wpt->gc_data->exported.toPrettyString());
       }
       writer->writeEndElement();
     }
-    if (tag->parentcdata && tag->parentcdata[0]) {
+    if (!tag->parentcdata.isEmpty()) {
       // FIXME: The length check is necessary to get line endings correct in our test suite.
       // Writing the zero length string eats a newline, at least with Qt 4.6.2.
       writer->writeCharacters(tag->parentcdata);
@@ -1374,18 +1371,9 @@ void free_gpx_extras(xml_tag* tag)
   char** ap;
 
   while (tag) {
-    if (tag->cdata) {
-      xfree(tag->cdata);
-    }
     if (tag->child) {
       free_gpx_extras(tag->child);
     }
-    if (tag->parentcdata) {
-      xfree(tag->parentcdata);
-    }
-    if (tag->tagname) {
-      xfree(tag->tagname);
-    }
     if (tag->attributes) {
       ap = tag->attributes;
 
index 0e3b894cc578b0de3a04ebc4bd105b90b264ff48..89fa613b68f5a9ccd6b12951d42b81e099541c8a 100644 (file)
@@ -168,12 +168,12 @@ html_disp(const waypoint* wpt)
 
       logpart = xml_findfirst(curlog, "groundspeak:type");
       if (logpart) {
-        gbfprintf(file_out, "<span class=\"gpsbabellogtype\">%s</span> by ", logpart->cdata);
+        gbfprintf(file_out, "<span class=\"gpsbabellogtype\">%s</span> by ", CSTR(logpart->cdata));
       }
 
       logpart = xml_findfirst(curlog, "groundspeak:finder");
       if (logpart) {
-        char* f = html_entitize(logpart->cdata);
+        char* f = html_entitize(CSTR(logpart->cdata));
         gbfprintf(file_out, "<span class=\"gpsbabellogfinder\">%s</span> on ", f);
         xfree(f);
       }
@@ -223,7 +223,7 @@ html_disp(const waypoint* wpt)
         if (html_encrypt && encoded) {
           s = rot13(logpart->cdata);
         } else {
-          s = xstrdup(logpart->cdata);
+          s = xstrdup(CSTR(logpart->cdata));
         }
 
         t = html_entitize(s);
index 005f5309bdb671c7ee1ce9a3a348abd72e294455..a2f2e3e9c2895d1bccaa46c567df76858a630aa1 100644 (file)
@@ -1,8 +1,7 @@
 /*
        Support for Google Earth & Keyhole "kml" format.
 
-       Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010  Robert Lipe,
-           robertlipe@gpsbabel.org
+       Copyright (C) 2005-2013 Robert Lipe, robertlipe@gpsbabel.org
        Updates by Andrew Kirmse, akirmse at google.com
 
        This program is free software; you can redistribute it and/or modify
@@ -1304,10 +1303,9 @@ char* kml_gc_mkstar(int rating)
   return tmp;
 }
 
-// Returns an allocated buffer that must be freed.
-char* kml_geocache_get_logs(const waypoint* wpt)
+QString kml_geocache_get_logs(const waypoint* wpt)
 {
-  char* r = xstrdup("");
+  QString r;
 
   fs_xml* fs_gpx = (fs_xml*)fs_chain_find(wpt->fs, FS_GPX);
   xml_tag* root = NULL;
@@ -1325,16 +1323,12 @@ char* kml_geocache_get_logs(const waypoint* wpt)
     // branches will always be taken.
     logpart = xml_findfirst(curlog, "groundspeak:type");
     if (logpart) {
-      r = xstrappend(r, "<p><b>");
-      r = xstrappend(r, logpart->cdata);
-      r = xstrappend(r, "</b>");
+      r = r + "<p><b>" + logpart->cdata + "</b>";
     }
 
     logpart = xml_findfirst(curlog, "groundspeak:finder");
     if (logpart) {
-      r = xstrappend(r, " by ");
-      r = xstrappend(r, logpart->cdata);
-      // xfree( f );
+      r = r + " by " + logpart->cdata;
     }
 
     logpart = xml_findfirst(curlog, "groundspeak:date");
@@ -1347,7 +1341,7 @@ char* kml_geocache_get_logs(const waypoint* wpt)
                   t.date().year(),
                   t.date().month(),
                   t.date().day());
-        r = xstrappend(r, temp);
+        r += temp;
         xfree(temp);
       }
     }
@@ -1364,17 +1358,17 @@ char* kml_geocache_get_logs(const waypoint* wpt)
       if (html_encrypt && encoded) {
         s = rot13(logpart->cdata);
       } else {
-        s = xstrdup(logpart->cdata);
+        s = xstrdup(CSTR(logpart->cdata));
       }
 
-      r = xstrappend(r, "<br />");
+      r = r + "<br />";
       t = html_entitize(s);
-      r = xstrappend(r, t);
+      r = r + t;
       xfree(t);
       xfree(s);
     }
 
-    r = xstrappend(r, "</p>");
+    r += "</p>";
     curlog = xml_findnext(root, curlog, "groundspeak:log");
   }
   return r;
@@ -1420,7 +1414,6 @@ static void kml_geocache_pr(const waypoint* waypointp)
   char date_placed[100];  // Always long engough for a date.
 
   const char* issues = "";
-  char* logs;
 
   writer->writeStartElement("Placemark");
 
@@ -1491,9 +1484,8 @@ static void kml_geocache_pr(const waypoint* waypointp)
   kml_write_data_element("gc_icon", is);
   kml_write_cdata_element("gc_short_desc", waypointp->gc_data->desc_short.utfstring);
   kml_write_cdata_element("gc_long_desc", waypointp->gc_data->desc_long.utfstring);
-  logs = kml_geocache_get_logs(waypointp);
+  QString logs = kml_geocache_get_logs(waypointp);
   kml_write_cdata_element("gc_logs", logs);
-  xfree(logs);
 
   writer->writeEndElement(); // Close ExtendedData tag
 
index 41ce891fd64fc04fc412cee704ca74f0c724896a..4c9a7c82e1614bd3ccef19ec624be8dad8a47f83 100644 (file)
 class xml_tag {
  public:
   xml_tag() :
-    tagname(NULL),
-    cdata(NULL),
-    parentcdata(NULL),
     attributes(NULL),
     parent(NULL),
     sibling(NULL),
     child(NULL) {}
 
-  char* tagname;
-  char* cdata;
-  char* parentcdata;
+  QString tagname;
+  QString cdata;
+  QString parentcdata;
   char** attributes;
   xml_tag* parent;
   xml_tag* sibling;
index 116ab8461586971f91d7440a39e2e065f51a3797..69e3e2a90fe8746ea3ee673ac1567c29872d783b 100644 (file)
@@ -182,12 +182,12 @@ text_disp(const waypoint* wpt)
 
       logpart = xml_findfirst(curlog, "groundspeak:type");
       if (logpart) {
-        gbfprintf(file_out, "%s by ", logpart->cdata);
+        gbfprintf(file_out, "%s by ", CSTR(logpart->cdata));
       }
 
       logpart = xml_findfirst(curlog, "groundspeak:finder");
       if (logpart) {
-        gbfprintf(file_out, "%s on ", logpart->cdata);
+        gbfprintf(file_out, "%s on ", CSTR(logpart->cdata));
       }
 
       logpart = xml_findfirst(curlog, "groundspeak:date");
@@ -232,7 +232,7 @@ text_disp(const waypoint* wpt)
         if (txt_encrypt && encoded) {
           s = rot13(logpart->cdata);
         } else {
-          s = xstrdup(logpart->cdata);
+          s = xstrdup(CSTR(logpart->cdata));
         }
 
         gbfprintf(file_out, "%s", s);
index 4d9aa91365f3972c726b46280f2f28aea33e0df2..66583a43829f63d3204045399347843a705fd0e9 100644 (file)
@@ -1780,7 +1780,7 @@ xml_tag* xml_findnext(xml_tag* root, xml_tag* cur, const char* tagname)
   xml_tag* result = cur;
   do {
     result = xml_next(root, result);
-  } while (result && case_ignore_strcmp(result->tagname, tagname));
+  } while (result && result->tagname.compare(tagname, Qt::CaseInsensitive));
   return result;
 }
 
index 5e11276d103e07d7414daccaf5e94f3eb2a33b44..1db0cf4031ea2fab0563a547a43d07e449073a57 100644 (file)
@@ -33,18 +33,9 @@ free_xml_tag(xml_tag* tag)
   char** ap;
 
   while (tag) {
-    if (tag->cdata) {
-      xfree(tag->cdata);
-    }
     if (tag->child) {
       free_gpx_extras(tag->child);
     }
-    if (tag->parentcdata) {
-      xfree(tag->parentcdata);
-    }
-    if (tag->tagname) {
-      xfree(tag->tagname);
-    }
     if (tag->attributes) {
       ap = tag->attributes;
 
@@ -61,6 +52,7 @@ free_xml_tag(xml_tag* tag)
   }
 }
 
+// FIXME: at some point, this becomes a plain ole copy constructor.
 static void
 copy_xml_tag(xml_tag** copy, xml_tag* src, xml_tag* parent)
 {
@@ -77,10 +69,10 @@ copy_xml_tag(xml_tag** copy, xml_tag* src, xml_tag* parent)
   res = new xml_tag;
   *copy = res;
 
-  memcpy(res, src, sizeof(xml_tag));
-  res->tagname = xstrdup(src->tagname);
-  res->cdata = xstrdup(src->cdata);
-  res->parentcdata = xstrdup(src->parentcdata);
+//  memcpy(res, src, sizeof(xml_tag));
+  res->tagname = (src->tagname);
+  res->cdata = (src->cdata);
+  res->parentcdata = (src->parentcdata);
   if (src->attributes) {
     ap = src->attributes;
     while (*ap) {